#ifndef DISK_DRIVER_H
#define DISK_DRIVER_H

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
#include <cstring>
#include <mutex>

// 全局单例的模拟磁盘驱动类
class DiskDriver{
public:
    static DiskDriver& getInstance(const std::string &path = ""); // 获取全局单例的方法, 首次调用时需要传入磁盘文件路径
    ~DiskDriver(); // 析构函数

    // 禁止拷贝和移动
    DiskDriver(const DiskDriver&) = delete;
    DiskDriver& operator=(const DiskDriver&) = delete;
    DiskDriver(DiskDriver&&) = delete;
    DiskDriver& operator=(DiskDriver&&) = delete;

    ssize_t d_write(void* buff, size_t size, off_t offset); // 在指定位置写上指定大小的内容
    ssize_t d_read(void* buff, size_t size, off_t offset); // 在指定位置读取指定大小的内容到指定缓冲区中
private:
    // 私有构造函数
    DiskDriver(const std::string &path);

    std::string file_path_;
    int fd_ = -1;

    static DiskDriver* instance_;
};

#endif